home *** CD-ROM | disk | FTP | other *** search
- import java.util.Random;
- import java.util.Timer;
- import javax.microedition.lcdui.Canvas;
- import javax.microedition.lcdui.Font;
- import javax.microedition.lcdui.Graphics;
- import javax.microedition.lcdui.Image;
-
- class FunSnakeCanvas extends Canvas {
- private int iScreenWidth;
- private int iScreenHeight;
- private int iPlayWidth;
- private int iPlayHeight;
- private int iHeightPercent = 85;
- private int borderLevel = 1;
- private int bordersElem;
- private int[][] borders;
- private int numSnakes = 2;
- private int maxSnakes;
- private int numTarget;
- private int[] xPos;
- private int[] yPos;
- private int[] xPosOld;
- private int[] yPosOld;
- private int[] xTPos;
- private int[] yTPos;
- private boolean targetOK;
- private boolean gameOverOK;
- private boolean fireOK;
- private boolean bContinue;
- private int elemMove;
- private int[] numRElem;
- private int[] orient;
- private int[] iCurrentTarget;
- private int iEatedTarget;
- private int score;
- private int lives;
- private int iSpeed;
- private int level;
- private int[][][] elemPositions;
- protected Timer snakeTimer;
- protected Timer snakeTimer2;
- private Random rand;
- Image mainImage;
- Graphics mainGraphics;
-
- public FunSnakeCanvas(int var1, int var2, int var3) {
- this.maxSnakes = this.numSnakes;
- this.numTarget = 1;
- this.targetOK = true;
- this.gameOverOK = false;
- this.fireOK = false;
- this.bContinue = false;
- this.score = 0;
- this.lives = 3;
- this.rand = new Random(System.currentTimeMillis());
- this.xTPos = new int[this.numTarget];
- this.yTPos = new int[this.numTarget];
- this.iCurrentTarget = new int[this.numTarget];
- this.xPos = new int[this.numSnakes];
- this.yPos = new int[this.numSnakes];
- this.xPosOld = new int[this.numSnakes];
- this.yPosOld = new int[this.numSnakes];
- this.numRElem = new int[this.numSnakes];
- this.orient = new int[this.numSnakes];
- this.elemPositions = new int[this.numSnakes][40][2];
- this.iSpeed = var1;
- this.elemMove = var3;
- this.level = var2;
- this.setAll();
- }
-
- public void setAll() {
- this.setLevel(this.level);
-
- for(int var1 = 0; var1 < this.numSnakes; ++var1) {
- this.numRElem[var1] = 2;
- this.orient[var1] = 2;
- this.xPosOld[var1] = -1;
- this.yPosOld[var1] = -1;
- this.xPos[var1] = this.elemMove * 5 * 2;
- this.yPos[var1] = this.elemMove * 5 * (var1 + 1);
- }
-
- for(int var2 = 0; var2 < this.numTarget; ++var2) {
- this.xTPos[var2] = this.elemMove * 15;
- this.yTPos[var2] = this.elemMove * 10;
- this.iCurrentTarget[var2] = 1;
- }
-
- this.iEatedTarget = 1;
- this.iScreenWidth = ((Canvas)this).getWidth();
- this.iScreenHeight = ((Canvas)this).getHeight();
- this.iPlayHeight = this.iScreenHeight * this.iHeightPercent / 100;
- this.mainImage = Image.createImage(this.iScreenWidth, this.iScreenHeight);
- this.mainGraphics = this.mainImage.getGraphics();
- this.mainGraphics.setColor(255, 255, 255);
- this.mainGraphics.fillRect(0, 0, ((Canvas)this).getWidth(), ((Canvas)this).getHeight());
- this.mainGraphics.setColor(0, 0, 0);
-
- for(int var3 = 0; var3 < this.numSnakes; ++var3) {
- this.mainGraphics.fillRect(this.xPos[var3], this.yPos[var3], this.elemMove, this.elemMove);
- this.elemPositions[var3][0][0] = this.xPos[var3];
- this.elemPositions[var3][0][1] = this.yPos[var3];
- this.elemPositions[var3][1][0] = this.xPos[var3] + this.elemMove;
- this.elemPositions[var3][1][1] = this.yPos[var3];
- }
-
- for(int var4 = 0; var4 < this.numTarget; ++var4) {
- this.mainGraphics.fillRect(this.xTPos[var4], this.yTPos[var4], this.elemMove, this.elemMove);
- }
-
- this.snakeTimer = new Timer();
- this.snakeTimer.schedule(new FunSnakeCanvas$BadSnakeTask(this), 0L, (long)this.iSpeed);
- }
-
- public void setLevel(int var1) {
- switch (var1) {
- case 0:
- this.bordersElem = 2;
- this.borders = new int[this.bordersElem][2];
- this.borders[0][0] = this.borders[0][1] = this.borders[1][0] = this.borders[1][1] = 0;
- break;
- case 1:
- this.bordersElem = 10;
- this.borders = new int[this.bordersElem][2];
-
- for(int var2 = 0; var2 < this.bordersElem; ++var2) {
- this.borders[var2][0] = var2 * this.elemMove;
- this.borders[var2][1] = this.elemMove * 10;
- }
- break;
- default:
- this.bordersElem = 2;
- this.borders = new int[this.bordersElem][2];
- this.borders[0][0] = this.borders[0][1] = this.borders[1][0] = this.borders[1][1] = 0;
- }
-
- }
-
- public void calculateScore() {
- this.score += 5;
- }
-
- public int chooseCurrentTarget() {
- int var1;
- for(var1 = -1; var1 < 0; var1 = this.rand.nextInt()) {
- }
-
- int var2 = var1 % 6;
- return var2;
- }
-
- public void setCurrentTarget(int var1, int var2, int var3) {
- String var4 = "O";
- switch (var1) {
- case 1:
- var4 = "0";
- break;
- case 2:
- var4 = "F";
- break;
- case 3:
- var4 = "S";
- break;
- case 4:
- var4 = "R";
- break;
- case 5:
- var4 = "M";
- break;
- default:
- var4 = "I";
- }
-
- Font var5 = Font.getFont(32, 1, 8);
- this.mainGraphics.setFont(var5);
- this.mainGraphics.drawString(var4, var2, var3, 20);
- }
-
- public boolean checkErrorPos(int var1, int var2, int var3) {
- boolean var4 = false;
- byte var5 = 0;
- int var6 = this.iScreenWidth - this.elemMove;
- byte var7 = 0;
- int var8 = this.iPlayHeight;
- if (var2 == var5) {
- var4 = true;
- }
-
- if (var2 >= var6) {
- var4 = true;
- }
-
- if (var3 == var7) {
- var4 = true;
- }
-
- if (var3 >= var8) {
- var4 = true;
- }
-
- if (var1 == 0) {
- for(int var9 = 0; var9 < this.numRElem[0] - 1; ++var9) {
- if (var2 == this.elemPositions[0][var9][0] && var3 == this.elemPositions[0][var9][1]) {
- var4 = true;
- }
- }
-
- for(int var10 = 1; var10 <= this.numSnakes - 1; ++var10) {
- for(int var11 = 0; var11 < this.numRElem[var10]; ++var11) {
- if (var2 == this.elemPositions[var10][var11][0] && var3 == this.elemPositions[var10][var11][1]) {
- var4 = true;
- }
- }
- }
-
- for(int var12 = 0; var12 < this.bordersElem; ++var12) {
- if (var2 == this.borders[var12][0] && var3 == this.borders[var12][1]) {
- var4 = true;
- }
- }
- }
-
- return var4;
- }
-
- public boolean checkTargetNewPos(int var1, int var2) {
- boolean var3 = true;
- byte var4 = 0;
- int var5 = this.iScreenWidth - this.elemMove;
- byte var6 = 0;
- int var7 = this.iPlayHeight - this.elemMove;
- if (var1 <= var4 || var1 >= var5) {
- var3 = false;
- }
-
- if (var2 <= var6 || var2 >= var7) {
- var3 = false;
- }
-
- return var3;
- }
-
- // $FF: renamed from: Ca (int) void
- public void method_0(int var1) {
- int var2 = 0 + this.elemMove;
- int var10000 = this.iScreenWidth - 2 * this.elemMove;
- int var4 = 0 + this.elemMove;
- var10000 = this.iPlayHeight - this.elemMove;
- var10000 = this.orient[var1];
- boolean var6 = true;
- if (var1 != 0) {
- if (this.xPos[var1] <= 10) {
- var6 = false;
- this.orient[var1] = 2;
- }
-
- if (this.xPos[var1] >= 80) {
- var6 = false;
- this.orient[var1] = 1;
- }
-
- if (this.yPos[var1] <= 10) {
- var6 = false;
- this.orient[var1] = 4;
- }
-
- if (this.yPos[var1] >= 70) {
- var6 = false;
- this.orient[var1] = 3;
- }
- }
-
- }
-
- public void ActionsOnEatedTarget() {
- switch (this.iEatedTarget) {
- case 1:
- this.score += 20;
- case 2:
- default:
- break;
- case 3:
- if (this.numSnakes < this.maxSnakes) {
- ++this.numSnakes;
- }
- break;
- case 4:
- if (this.numSnakes >= 2) {
- --this.numSnakes;
- }
- break;
- case 5:
- this.numRElem[0] = 1;
- }
-
- }
-
- public void calculateElem(int var1, int var2) {
- this.xPosOld[var1] = this.xPos[var1];
- this.yPosOld[var1] = this.yPos[var1];
- switch (this.orient[var1]) {
- case 1:
- this.xPos[var1] -= this.elemMove;
- break;
- case 2:
- this.xPos[var1] += this.elemMove;
- break;
- case 3:
- this.yPos[var1] -= this.elemMove;
- break;
- case 4:
- this.yPos[var1] += this.elemMove;
- }
-
- if (this.checkErrorPos(var1, this.xPos[var1], this.yPos[var1])) {
- this.gameOverOK = true;
- }
-
- if (this.numRElem[0] > 39) {
- this.gameOverOK = true;
- }
-
- if (this.score > 350) {
- this.gameOverOK = true;
- }
-
- if (var1 == 0) {
- for(int var3 = 0; var3 < this.numTarget; ++var3) {
- if (this.xPos[0] == this.xTPos[var3] && this.yPos[0] == this.yTPos[var3]) {
- this.iEatedTarget = this.iCurrentTarget[var3];
- this.ActionsOnEatedTarget();
- this.targetOK = false;
- this.calculateScore();
- int var10002 = this.numRElem[0]++;
- }
- }
- }
-
- this.elemPositions[var1][this.numRElem[var1] - 1][0] = this.xPos[var1];
- this.elemPositions[var1][this.numRElem[var1] - 1][1] = this.yPos[var1];
-
- for(int var4 = 0; var4 < this.numRElem[var1] - 1; ++var4) {
- this.elemPositions[var1][var4][0] = this.elemPositions[var1][var4 + 1][0];
- this.elemPositions[var1][var4][1] = this.elemPositions[var1][var4 + 1][1];
- }
-
- }
-
- public void drawElem() {
- this.mainGraphics.setColor(255, 255, 255);
- this.mainGraphics.fillRect(0, 0, ((Canvas)this).getWidth(), ((Canvas)this).getHeight());
- this.mainGraphics.setColor(0, 0, 0);
- this.mainGraphics.fillRect(0, 0, this.iScreenWidth, this.elemMove);
- this.mainGraphics.fillRect(0, this.iPlayHeight, this.iScreenWidth, 2);
- this.mainGraphics.fillRect(0, 0, this.elemMove, this.iPlayHeight);
- this.mainGraphics.fillRect(this.iScreenWidth - this.elemMove, 0, this.elemMove, this.iPlayHeight);
- Font var1 = Font.getFont(32, 1, 8);
- this.mainGraphics.setFont(var1);
-
- for(int var2 = 0; var2 < this.bordersElem; ++var2) {
- this.mainGraphics.fillRect(this.borders[var2][0], this.borders[var2][1], this.elemMove, this.elemMove);
- }
-
- if (this.gameOverOK) {
- --this.lives;
- this.snakeTimer.cancel();
- if (this.lives == 0) {
- this.mainGraphics.drawString("GAME OVER ", 25, 40, 20);
- }
-
- if (this.lives > 0) {
- this.gameOverOK = false;
- this.bContinue = true;
- this.mainGraphics.drawString("Press FIRE", 25, 40, 20);
- }
- }
-
- this.mainGraphics.drawString("L:" + this.level + " S:" + this.score + " Lives:" + this.lives, 1, this.iPlayHeight, 20);
-
- for(int var3 = 0; var3 < this.numSnakes; ++var3) {
- if (var3 != 0) {
- this.mainGraphics.setColor(0, 255, 0);
- }
-
- for(int var4 = 0; var4 < this.numRElem[0] - 1; ++var4) {
- this.mainGraphics.fillRoundRect(this.elemPositions[var3][var4][0], this.elemPositions[var3][var4][1], this.elemMove, this.elemMove, this.elemMove - 1, this.elemMove - 1);
- }
- }
-
- if (this.targetOK) {
- this.mainGraphics.setColor(255, 0, 0);
-
- for(int var6 = 0; var6 < this.numTarget; ++var6) {
- this.mainGraphics.fillRect(this.xTPos[var6], this.yTPos[var6], this.elemMove, this.elemMove);
- }
-
- for(int var5 = 0; var5 < this.numTarget; ++var5) {
- this.setCurrentTarget(this.iCurrentTarget[var5], this.xTPos[var5], this.yTPos[var5]);
- }
- } else {
- for(int var7 = 0; var7 < this.numTarget; ++var7) {
- this.iCurrentTarget[var7] = this.chooseCurrentTarget();
-
- while(true) {
- int var8;
- for(var8 = -1; var8 < 0; var8 = this.rand.nextInt()) {
- }
-
- int var10002;
- for(this.xTPos[var7] = var8 % this.iScreenWidth; this.xTPos[var7] % this.elemMove != 0; var10002 = this.xTPos[var7]++) {
- }
-
- for(var8 = -1; var8 < 0; var8 = this.rand.nextInt()) {
- }
-
- for(this.yTPos[var7] = var8 % this.iScreenHeight; this.yTPos[var7] % this.elemMove != 0; var10002 = this.yTPos[var7]++) {
- }
-
- if (this.checkTargetNewPos(this.xTPos[var7], this.yTPos[var7])) {
- break;
- }
- }
- }
-
- this.targetOK = true;
- }
-
- if (this.fireOK && this.iEatedTarget == 2) {
- this.mainGraphics.setColor(0, 0, 0);
- switch (this.orient[0]) {
- case 1:
- this.mainGraphics.drawLine(this.xPos[0], this.yPos[0], this.xPos[0] - 10, this.yPos[0]);
- break;
- case 2:
- this.mainGraphics.drawLine(this.xPos[0], this.yPos[0], this.xPos[0] + 10, this.yPos[0]);
- break;
- case 3:
- this.mainGraphics.drawLine(this.xPos[0], this.yPos[0] - 10, this.xPos[0], this.yPos[0]);
- break;
- case 4:
- this.mainGraphics.drawLine(this.xPos[0], this.yPos[0] + 10, this.xPos[0], this.yPos[0]);
- }
-
- this.fireOK = false;
- }
-
- }
-
- public void paint(Graphics var1) {
- var1.drawImage(this.mainImage, 0, 0, 20);
- }
-
- public void CalculateNext(int var1) {
- for(int var2 = 0; var2 < this.numSnakes; ++var2) {
- this.method_0(var2);
- this.calculateElem(var2, var1);
- }
-
- this.drawElem();
- ((Canvas)this).repaint();
- }
-
- public void keyPressed(int var1) {
- switch (((Canvas)this).getGameAction(var1)) {
- case 1:
- if (this.orient[0] != 4 && this.yPos[0] == this.yPosOld[0]) {
- this.orient[0] = 3;
- }
- break;
- case 2:
- if (this.orient[0] != 2 && this.xPos[0] == this.xPosOld[0]) {
- this.orient[0] = 1;
- }
- case 3:
- case 4:
- case 7:
- default:
- break;
- case 5:
- if (this.orient[0] != 1 && this.xPos[0] == this.xPosOld[0]) {
- this.orient[0] = 2;
- }
- break;
- case 6:
- if (this.orient[0] != 3 && this.yPos[0] == this.yPosOld[0]) {
- this.orient[0] = 4;
- }
- break;
- case 8:
- this.fireOK = true;
- if (this.bContinue) {
- this.setAll();
- this.bContinue = false;
- }
- }
-
- }
-
- // $FF: synthetic method
- static int[] access$000(FunSnakeCanvas var0) {
- return var0.orient;
- }
- }
-